﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using DECOR.DL.DALC.SAPC.Proxy;
using CroslandSAP.Proxy;
using System.Configuration;
using CROSLAND.BL.BE;
using System.Data;
using DECOR.BL.BE;

namespace CROSLAND.DL.DALC.SAPC
{
    public class ParametroDALC : IParametroDALC
    {
        
       public static ParametroDALC Instance() {
            if (_instance == null)
            {
                lock (typeof(ParametroDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new ParametroDALC();
                    }
                }
            }
            return _instance;
        }

        private ParametroDALC() { }
        private static volatile ParametroDALC _instance = null;

        #region Mejoras Web v2

        public void get_Param_PFact(ref List<GenericBE> lstDenom, ref List<GenericBE> lstMoneda,
            ref List<GenericBE> lstMotivoBloq, ref List<GenericBE> lstClaseDoc, ref List<GenericBE> lstRFACT,
            ref List<GenericBE> lstSTATU, ref List<GenericBE> lstTFPLU,ref List<GenericBE> lstCPag)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            //DD07VTable T_Rfact=new DD07VTable();
            //DD07VTable T_Statu = new DD07VTable();
            //TCURTTable T_Tcurt = new TCURTTable();
            //TFPLUTable T_Tfplu = new TFPLUTable();
            //TVFKTTable T_Tvfkt = new TVFKTTable();
            //TVFSTTable T_Tvfst = new TVFSTTable();
            //TVTBTTable T_Tvtbt = new TVTBTTable();
            //T052UTable T_Cpag = new T052UTable();

            //p.Zweb_Get_Param_Pfact(ref T_Cpag, ref  T_Rfact, ref  T_Statu, ref  T_Tcurt, ref  T_Tfplu, ref  T_Tvfkt, ref  T_Tvfst, ref T_Tvtbt);

            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            GenericBE blanco = new GenericBE();
            blanco.Codigo = " "; 
            blanco.Descripcion = " ";

            lstRFACT.Add(blanco);
            //foreach(DD07V item in T_Rfact )
            //{   GenericBE i = new GenericBE();
            //    i.Codigo = item.Domvalue_L;
            //    i.Descripcion = item.Domvalue_L + charSep + item.Ddtext;
            //    lstRFACT.Add(i);
            //}

            lstSTATU.Add(blanco);
           
            //foreach(DD07V item in T_Statu )
            //{

            //        GenericBE i = new GenericBE();
            //        i.Codigo = item.Domvalue_L;
            //        i.Descripcion = item.Domvalue_L + charSep + item.Ddtext;
            //        lstSTATU.Add(i);

            //}

            //lstMoneda.Add(blanco);
            //foreach(TCURT item in T_Tcurt )
            //{   GenericBE i = new GenericBE();
            //    i.Codigo = item.Waers;
            //    i.Descripcion = item.Waers + charSep + item.Ltext;
            //    lstMoneda.Add(i);
            //}

            //lstTFPLU.Add(blanco);
            //foreach(TFPLU item in T_Tfplu )
            //{   GenericBE i = new GenericBE();
            //    i.Codigo = item.Fpttp;
            //    i.Descripcion = item.Fpttp + charSep + item.Ttbez;
            //    lstTFPLU.Add(i);
            //}

            //lstClaseDoc.Add(blanco);
            //foreach (TVFKT item in T_Tvfkt)
            //{
            //    GenericBE i = new GenericBE();
            //    i.Codigo = item.Fkart;
            //    i.Descripcion = item.Fkart + charSep + item.Vtext;
            //    lstClaseDoc.Add(i);
            //}

            //lstMotivoBloq.Add(blanco);
            //foreach(TVFST item in T_Tvfst )
            //{   GenericBE i = new GenericBE();
            //    i.Codigo = item.Faksp;
            //    i.Descripcion = item.Faksp + charSep + item.Vtext;
            //    lstMotivoBloq.Add(i);
            //}

            //lstDenom.Add(blanco);
            //foreach (TVTBT item in T_Tvtbt)
            //{
            //    if (item.Tetbe == "Z001" || item.Tetbe == "Z002")
            //    {
            //        GenericBE i = new GenericBE();
            //        i.Codigo = item.Tetbe;
            //        i.Descripcion = item.Tetbe + charSep + item.Tebez;
            //        lstDenom.Add(i);
            //    }
            //}


            //lstCPag.Add(blanco);
            //foreach (T052U item in T_Cpag)
            //{
            //    GenericBE i = new GenericBE();
            //    i.Codigo = item.Zterm;
            //    i.Descripcion = item.Zterm + charSep + item.Text1;
            //    lstCPag.Add(i);
            //}    
        }


        public List<StockBE> getDataLotes(string pMatnr, decimal pCant, string pCentro, string pAlmacen, string pLote,
            string pNumPedido, string pPosNr, string pOrgVtas, string pCanalDist)
        {
            //string charSep = ParametroDALC.getParamValueStatic("charSep");

            //ParametrosProxy p = new ParametrosProxy();
            //p.Connection = DALC.getConnection;
            //if (!p.Connection.IsOpen) { p.Connection.Open(); }

            //ZWEB_STOCKTable lt_lotes = new ZWEB_STOCKTable();
            //p.Zweb_Data_Lotes(pLote, pAlmacen, pMatnr, pPosNr, pNumPedido,
            //    pOrgVtas, pCanalDist, pCentro, pCant, ref lt_lotes);
            //SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            //p.Connection = null;

            List<StockBE> lstStockBE = new List<StockBE>();
            //StockBE objStockBE;

            //foreach (ZWEB_STOCK ls_lotes in lt_lotes)
            //{
            //    if (ls_lotes.Stock_Di > 9999999998)
            //    {
            //        continue;
            //    }
   
            //    objStockBE = new StockBE();

            //    objStockBE.CodMaterial = ls_lotes.Matnr;
            //    objStockBE.DescMaterial = ls_lotes.Matnom;
            //    objStockBE.CodCentro = ls_lotes.Werks;
            //    objStockBE.DescCentro = ls_lotes.Wernom;
            //    objStockBE.CodAlmacen = ls_lotes.Lgort;
            //    objStockBE.DescAlmacen = !ls_lotes.Lgort.Equals(string.Empty) ? ls_lotes.Lgort + " (" + ls_lotes.Lgonom + ")" : ls_lotes.Lgort;
            //    objStockBE.CodLote = ls_lotes.Charg;
            //    objStockBE.StockDisponible = ls_lotes.Stock_Di;
            //    objStockBE.ValorCaracteristica = ls_lotes.Atwrt; //rgutierrez 29.12.2011
                
            //    lstStockBE.Add(objStockBE);
            //}

            return lstStockBE;
        }

        public void getDataLotes(string pMatnr, decimal pCant, string pCentro, string pAlmacen, string pLote,
                                string pNumPedido, string pPosNr, string pOrgVtas, string pCanalDist,
                                ref List<GenericBE> lstCentro, ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstLote, ref string pCentroOp,
                                ref string pAlmacenOp, ref string pLoteOp)
        {
            //string charSep = ParametroDALC.getParamValueStatic("charSep");

            //ParametrosProxy p = new ParametrosProxy();
            //p.Connection = DALC.getConnection;
            //if (!p.Connection.IsOpen) { p.Connection.Open(); }

            //ZWEB_STOCKTable lt_lotes = new ZWEB_STOCKTable();

            //p.Zweb_Data_Lotes(string.Empty, string.Empty, pMatnr, pPosNr, pNumPedido,
            //    pOrgVtas, pCanalDist, string.Empty, pCant, ref lt_lotes);

            //SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            //p.Connection = null;
            //GenericBE objItem, objAux;
            //List<LoteBE> lst_lote = new List<LoteBE>();
            ////mtejada: ordeno de menor a mayor

            //for (int i = 0; i <= lt_lotes.Count - 1; i++)
            //{
            //    LoteBE lote = new LoteBE();
            //    lote.MATNR = lt_lotes[i].Matnr;
            //    lote.MATNOM = lt_lotes[i].Matnom;
            //    lote.WERKS = lt_lotes[i].Werks;
            //    lote.WERNOM = lt_lotes[i].Wernom;
            //    lote.LGORT = lt_lotes[i].Lgort;
            //    lote.LGONOM = lt_lotes[i].Lgonom;
            //    lote.CHARG = lt_lotes[i].Charg;
            //    lote.STOCK_LU = lt_lotes[i].Stock_Lu;
            //    lote.STOCK_PC = lt_lotes[i].Stock_Pc;
            //    lote.STOCK_EC = lt_lotes[i].Stock_Ec;
            //    lote.STOCK_DI = lt_lotes[i].Stock_Di;
            //    lote.STOCK_CU = lt_lotes[i].Stock_Cu;

            //    lst_lote.Add(lote);
            //}
            //lst_lote = lst_lote.OrderBy(x => x.STOCK_DI).ToList();
            ////busco el valor Optimo
            //for (int i = 0; i <= lst_lote.Count - 1; i++)
            //{
            //    if (lst_lote[i].STOCK_DI >= pCant)
            //    {
            //        pCentroOp = lst_lote[i].WERKS;
            //        pAlmacenOp = lst_lote[i].LGORT;
            //        pLoteOp = lst_lote[i].CHARG;
            //        break;
            //    }
            //}
            ////-------------------------------------------------------------
            //foreach (ZWEB_STOCK ls_lotes in lt_lotes)
            //{
            //    //---- Divido el resultado en Centro / Almacén / Lote
            //    objAux = lstCentro.Find(X => X.Codigo == ls_lotes.Werks);
            //    if (objAux == null)
            //    {
            //        objItem = new GenericBE();
            //        objItem.Codigo = ls_lotes.Werks;
            //        objItem.Descripcion = objItem.Codigo + charSep + ls_lotes.Wernom;
            //        lstCentro.Add(objItem);
            //    }

            //    objAux = lstAlmacen.Find(X => X.Codigo == ls_lotes.Lgort);
            //    if (objAux == null)
            //    {
            //        objItem = new GenericBE();
            //        objItem.Codigo = ls_lotes.Lgort;
            //        objItem.Descripcion = objItem.Codigo + charSep + ls_lotes.Lgonom;
            //        lstAlmacen.Add(objItem);
            //    }

            //    objItem = new GenericBE();
            //    objItem.Codigo = ls_lotes.Charg;
            //    objItem.Descripcion = objItem.Codigo + charSep + ls_lotes.Wernom + charSep + ls_lotes.Stock_Di.ToString();
            //    lstLote.Add(objItem);
            //}
        }

        public void getDataDDL(ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstAsesores, 
            ref List<GenericBE> lstBloEnt, ref List<GenericBE> lstBloFac, ref List<GenericBE> lstCanal, 
            ref List<GenericBE> lstCondExp, ref List<GenericBE> lstCondicionPago, ref List<GenericBE> lstGrpCond, 
            ref List<GenericBE> lstGrpVend, ref List<GenericBE> lstMotPed, ref List<GenericBE> lstOfVtas, 
            ref List<GenericBE> lstOrgVtas, ref List<GenericBE> lstSectores, ref List<GenericBE> lstTipoDoc,
            out DateTime fechaHasta, ref List<GenericBE> lstMotRec, ref List<GenericBE> lstZonaReg, 
            ref List<GenericBE> lstGrupoCli, ref List<UbigeoBE> lstUbigeo, ref List<GenericBE> lstCamp, ref List<GenericBE> lstCity, 
            ref List<GenericBE> lstColor, ref List<GenericBE> lstDispo, ref List<GenericBE> lstGrpArt, ref List<GenericBE> lstZReg,
            ref List<GenericBE> lstBancoCheque, ref List<GenericBE> ltsBancoDepo, ref List<GenericBE> lstProcesadora, 
            ref List<LibrosxvstelBE> lstLibrosxvstel, out decimal pIGV)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            //------------------------------------------------------------------
       
            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            PA0001Table lt_asesores = new PA0001Table();
            TVLSTTable lt_bloent = new TVLSTTable();
            TVFSTTable lt_blofac = new TVFSTTable();
            TVSBTTable lt_condexp = new TVSBTTable();
            TVKGGTTable lt_grpcond = new TVKGGTTable();
            TVGRTTable lt_grpvend = new TVGRTTable();
            TVAUTTable lt_motped = new TVAUTTable();
            TVKBTTable lt_oficinas = new TVKBTTable();
            TSPATTable lt_sectores = new TSPATTable();
            TVAKTTable lt_tipodoc = new TVAKTTable();
            T001LTable lt_Almacen = new T001LTable();
            T052UTable lt_CondPago = new T052UTable();
            TVTWTTable lt_Canal = new TVTWTTable();
            TVKOTTable lt_OrgVtas = new TVKOTTable();
            TVAGTTable lt_MotRec = new TVAGTTable();
            ZTSD_ZONAREGTTable lt_ZReg = new ZTSD_ZONAREGTTable();
            VLCSCAMPGNTTable lt_Camp = new VLCSCAMPGNTTable();
            ADRCITYTTable lt_City = new ADRCITYTTable();
            BAPICHARACTVALUESDESCRTable lt_Color = new BAPICHARACTVALUESDESCRTable();
            ZSSD_UBIGEOTable lt_ubigeo = new ZSSD_UBIGEOTable();
            TKUKTTable lt_zona_registral = new TKUKTTable();
            TVV1TTable lt_grupo_clientes = new TVV1TTable();
            TKUKTTable lt_tkukt = new TKUKTTable(); TVV1TTable lt_tvv1t = new TVV1TTable();
            T023TTable lt_grpArt = new T023TTable(); CVLC10TTable lt_dispo = new CVLC10TTable();
            ZSSD_JERARQUIASTable lt_Bancocheq = new ZSSD_JERARQUIASTable();
            ZSSD_JERARQUIASTable lt_Bancodepo = new ZSSD_JERARQUIASTable();
            ZSSD_COMPCOMBOSTable lt_Tipoprocesadora = new ZSSD_COMPCOMBOSTable();
            ZTVMC_SERIEDOCFATable lt_Librosxvstel = new ZTVMC_SERIEDOCFATable();
            string fecHasta = "";

            p.Zvmc_Sd_001(out fecHasta, out pIGV, ref lt_Almacen, ref lt_asesores, ref lt_Bancocheq, ref lt_Bancodepo, ref lt_bloent, ref lt_blofac, ref lt_Camp, ref lt_Canal, 
                ref lt_City, ref lt_Color, ref lt_condexp,
                ref lt_CondPago, ref lt_dispo, ref lt_grpArt, ref lt_grpcond, ref lt_grpvend, ref lt_Librosxvstel, ref lt_motped, ref lt_oficinas, ref lt_OrgVtas,
                ref lt_sectores, ref lt_tipodoc, ref lt_Tipoprocesadora, ref lt_zona_registral, ref lt_MotRec, ref lt_grupo_clientes, ref lt_ubigeo, ref lt_ZReg);
            //out string E_Fecha, ref T001LTable T_Almacen, ref PA0001Table T_Asesores, ref ZSSD_JERARQUIASTable T_Bancocheq, ref ZSSD_JERARQUIASTable T_Bancodepo,
            //ref TVLSTTable T_Bloent, ref TVFSTTable T_Blofac, ref VLCSCAMPGNTTable T_Camp, ref TVTWTTable T_Canal, ref ADRCITYTTable T_City, 
            //ref BAPICHARACTVALUESDESCRTable T_Color, ref TVSBTTable T_Condexp, ref T052UTable T_Condicionespago, ref CVLC10TTable T_Dispo, ref T023TTable T_Grpart, 
            //ref TVKGGTTable T_Grpcond, ref TVGRTTable T_Grpvend, ref ZTVMC_SERIEDOCFATable T_Librosxvstel, ref TVAUTTable T_Motped, ref TVKBTTable T_Oficinas,
            //ref TVKOTTable T_Orgvtas, ref TSPATTable T_Sectores, ref TVAKTTable T_Tipodoc, ref ZSSD_COMPCOMBOSTable T_Tipoprocesadora, ref TKUKTTable T_Tkukt, 
            //ref TVAGTTable T_Tvagt, ref TVV1TTable T_Tvv1t, ref ZSSD_UBIGEOTable T_Ubigeo, ref ZTSD_ZONAREGTTable T_Zreg
            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;
            //--------------------------------------
            GenericBE objBlank= new GenericBE();
            objBlank.Codigo = string.Empty; objBlank.Descripcion = string.Empty;
            GenericBE objRetval;

            fechaHasta = dateSapToNet(fecHasta);

            //--- Nueva Lista de Zona Reg.:
            lstZReg.Add(objBlank);
            foreach (ZTSD_ZONAREGT ls_zreg in lt_ZReg)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_zreg.Kukla;
                objRetval.Descripcion = ls_zreg.Zzona_Reg;
                lstZReg.Add(objRetval);
            }
            
            //--- Lista de asesores comerciales:
            lstAsesores.Add(objBlank);
            foreach (PA0001 ls_asesores in lt_asesores)
            {
                if (!ls_asesores.Ename.Equals(string.Empty))
                {
                    objRetval = new GenericBE();
                    objRetval.Codigo = ls_asesores.Pernr;
                    objRetval.Descripcion = ls_asesores.Ename;
                    lstAsesores.Add(objRetval);
                }
            }

            //--- Bloqueos de entrega:
            lstBloEnt.Add(objBlank);
            foreach (TVLST ls_bloent in lt_bloent)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_bloent.Lifsp;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_bloent.Vtext;
                lstBloEnt.Add(objRetval);
            }
            
            //--- Bloqueos de factura:
            lstBloFac.Add(objBlank);
            foreach (TVFST ls_blofac in lt_blofac)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_blofac.Faksp;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_blofac.Vtext;
                lstBloFac.Add(objRetval);
            }

            //--- Condición de expedición / prioridad de entrega
            lstCondExp.Add(objBlank);
            foreach (TVSBT ls_condexp in lt_condexp)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_condexp.Vsbed;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_condexp.Vtext;
                lstCondExp.Add(objRetval);
            }

            //--- Grupo de condiciones:
            lstGrpCond.Add(objBlank);
            foreach (TVKGGT ls_grpcond in lt_grpcond)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_grpcond.Kdkgr;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_grpcond.Vtext;
                lstGrpCond.Add(objRetval);
            }
            
            //--- Grupo de vendedores {Revisar si queda o se va}
            lstGrpVend.Add(objBlank);
            foreach (TVGRT ls_grpvend in lt_grpvend)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_grpvend.Vkgrp;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_grpvend.Bezei;
                lstGrpVend.Add(objRetval);
            }

            //--- Motivo de pedido
            lstMotPed.Add(objBlank);
            foreach (TVAUT ls_motped in lt_motped)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_motped.Augru;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_motped.Bezei;
                lstMotPed.Add(objRetval);
            }

            //--- Oficina de ventas
            lstOfVtas.Add(objBlank);
            foreach (TVKBT ls_oficinas in lt_oficinas)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_oficinas.Vkbur;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_oficinas.Bezei;
                lstOfVtas.Add(objRetval);
            }
            
            //--- Sectores {Revisar si queda o se va}
            foreach (TSPAT ls_sectores in lt_sectores)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_sectores.Spart;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_sectores.Vtext;
                lstSectores.Add(objRetval);
            }

            //--- Tipo / Clase de documento
            foreach (TVAKT ls_tipodoc in lt_tipodoc)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_tipodoc.Auart;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_tipodoc.Bezei;
                lstTipoDoc.Add(objRetval);
            }

            //Condiciones de pago
            lstCondicionPago.Add(objBlank);
            foreach (T052U item in lt_CondPago)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Zterm;
                objRetval.Descripcion = item.Zterm + charSep + item.Text1;
                lstCondicionPago.Add(objRetval);
            }

            //Canal
            lstCanal.Add(objBlank);
            foreach (TVTWT ls_Canal in lt_Canal)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_Canal.Vtweg;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_Canal.Vtext;
                lstCanal.Add(objRetval);
            }
            //Org Ventas
            lstOrgVtas.Add(objBlank);
            foreach (TVKOT ls_OrgVta in lt_OrgVtas)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_OrgVta.Vkorg;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_OrgVta.Vtext;
                lstOrgVtas.Add(objRetval);
            }
            //Motivo de Reclamo
            lstMotRec.Add(objBlank);
            foreach (TVAGT item in lt_MotRec)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Abgru;
                objRetval.Descripcion = item.Bezei;
                lstMotRec.Add(objRetval);
            }
            //Campañas
            lstCamp.Add(objBlank);
            foreach (VLCSCAMPGNT item in lt_Camp)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Cmpgn;
                objRetval.Descripcion = item.Cmpgntxt;
                lstCamp.Add(objRetval);
            }
            //Poblacion
            lstCity.Add(objBlank);
            foreach (ADRCITYT item in lt_City)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.City_Code;
                objRetval.Descripcion = item.City_Name;
                lstCity.Add(objRetval);
            }
            //Color
            lstColor.Add(objBlank);
            foreach (BAPICHARACTVALUESDESCR item in lt_Color)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Value_Char;
                objRetval.Descripcion = item.Description;
                lstColor.Add(objRetval);
            }
            //Grupo de Artículos
            lstGrpArt.Add(objBlank);
            foreach (T023T item in lt_grpArt)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Matkl;
                objRetval.Descripcion = item.Wgbez;
                lstGrpArt.Add(objRetval);
            }
            //Disponibilidad
            lstDispo.Add(objBlank);
            foreach (CVLC10T item in lt_dispo)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Avail;
                objRetval.Descripcion = item.Availtxt;
                lstDispo.Add(objRetval);
            }
            //Zona Registral
            lstZonaReg.Add(objBlank);
            foreach (TKUKT item in lt_zona_registral)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Kukla;
                objRetval.Descripcion = item.Vtext;
                lstZonaReg.Add(objRetval);
            }
            //GrupoCliente
            lstGrupoCli.Add(objBlank);
            foreach (TVV1T item in lt_grupo_clientes)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Kvgr1;
                objRetval.Descripcion = item.Bezei;
                lstGrupoCli.Add(objRetval);
            }
            //Ubigeos
            UbigeoBE objU = new UbigeoBE();
            foreach (ZSSD_UBIGEO  item in lt_ubigeo)
            {
                objU = new UbigeoBE();
                objU.CodigoRegion = item.Cod_Region;
                objU.DesRegion = item.Des_Region;
                objU.CodPoblacion = item.Cod_Poblac;
                objU.DesPoblacion = item.Des_Poblac;
                objU.CodDistrito = item.Cod_Distri;
                objU.DesDistrito = item.Des_Distri;
                lstUbigeo.Add(objU);
            }
            //ref List<GenericBE> lstBancoCheque, ref List<GenericBE> ltsBancoDepo, ref List<GenericBE> lstProcesadora, ref List<LibrosxvstelBE> lstLibrosxvstel
            //lista de bancos para cheques
            foreach (ZSSD_JERARQUIAS item in lt_Bancocheq)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Prodh;
                objRetval.Descripcion = item.Prodh + ": " + item.Vtext;
                lstBancoCheque.Add(objRetval);
            }
            //lista de bancos para Depositos
            foreach (ZSSD_JERARQUIAS item in lt_Bancodepo)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Prodh;
                objRetval.Descripcion = item.Prodh + ": " + item.Vtext;
                ltsBancoDepo.Add(objRetval);
            }
            //lista de bancos para cheques
            foreach (ZSSD_COMPCOMBOS item in lt_Tipoprocesadora)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Id_Element;
                objRetval.Descripcion = item.Text;
                lstProcesadora.Add(objRetval);
            }
            //lista de libros por puesto de exp. o caja
            LibrosxvstelBE objlxv = null;
            foreach (ZTVMC_SERIEDOCFA item in lt_Librosxvstel)
            {
                objlxv = new LibrosxvstelBE();
                objlxv.Auart = item.Auart;
                objlxv.Bukrs = item.Bukrs;
                objlxv.Flag = item.Flag;
                objlxv.Invtp = item.Invtp;
                objlxv.Rgtno = item.Rgtno;
                objlxv.Vstel = item.Vstel;
                objlxv.DocSecuencia = item.Docsecuencia;
                lstLibrosxvstel.Add(objlxv);
            }
        }

        #endregion

        #region IParametroDALC Members

        public int getDecimales()
        {
            return ParametroDALC.getDecimalesStatic;
        }

        public decimal getIGV()
        {
            return 18.00m;
        }

        public decimal getTipoCambio()
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }

            string pFecha = dateNetToSap(DateTime.Now);
            decimal ex_tipoCambio = 0m;
            proxy.Zvmc_Sd_037(pFecha, out ex_tipoCambio);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            return ex_tipoCambio;
        }

        public decimal getTipoCambio(DateTime pFecha)
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }

            string lvFecha = dateNetToSap(pFecha);
            decimal ex_tipoCambio = 0m;
            proxy.Zvmc_Sd_037(lvFecha, out ex_tipoCambio);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            return ex_tipoCambio;
        }

        public List<GenericBE> getListaZipCode()
        {
            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            //ZTSD_ZIPCODESTable lt_zcodes = new ZTSD_ZIPCODESTable();
            //p.Zweb_Lista_Zipcodes("", "", ref lt_zcodes);

            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            List<GenericBE> lstRetval = new List<GenericBE>();
            GenericBE objRetval = new GenericBE();
            objRetval.Codigo = string.Empty; objRetval.Descripcion = string.Empty;
            lstRetval.Add(objRetval);

            //foreach (ZTSD_ZIPCODES ls_zcodes in lt_zcodes)
            //{
            //    objRetval = new GenericBE();
            //    objRetval.Codigo = ls_zcodes.Zcode;
            //    objRetval.Descripcion = ls_zcodes.Zdesc;
            //    lstRetval.Add(objRetval);
            //}
            return lstRetval;
        }

        public ClienteBE getClienteReniec(string pDNI)
        {
            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            //ZTSD_CLIENTESTable lt_data = new ZTSD_CLIENTESTable();
            //p.Zweb_Lee_Dni(pDNI, ref lt_data);

            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            ClienteBE objClienteBE = null;
            //foreach (ZTSD_CLIENTES ls_data in lt_data)
            //{
            //    objClienteBE = new ClienteBE();
            //    objClienteBE.Ciudad = ls_data.Ciudad;
            //    objClienteBE.CodigoPostal = ls_data.Zcode;
            //    objClienteBE.Descripcion = (ls_data.Nombre + ' ' + ls_data.Appat + ' ' + ls_data.Apmat).Trim();
            //    objClienteBE.Direccion = ls_data.Direc;
            //    objClienteBE.Eventual = true;
            //    objClienteBE.Ruc = ls_data.Codig;
            //    break;
            //}
            return objClienteBE;
        }

        /// <summary>
        /// Busca en el archivo de configuración el valor de un key
        /// </summary>
        /// <param name="key">Nombre de una entrada en el archivo de configuración</param>
        /// <returns>Valor asociado al key</returns>
        public string getParamValue(string key)
        {
            return getParamValueStatic(key);
        }

        /// <summary>
        /// Verifica que tipo de doc sea una oferta
        /// </summary>
        /// <param name="pCodTipoDoc">Tipo de documento.</param>
        /// <returns>Devuelve true si es oferta o false si no es oferta</returns>
        public bool esTipoOferta(string pCodTipoDoc)
        {
            return esOferta(pCodTipoDoc);
        }

        /// <summary>
        /// Verifica que tipo de doc sea algun tipo de servicio
        /// </summary>
        /// <param name="pCodTipoDoc">Tipo de documento.</param>
        /// <returns>Devuelve true si es un servicio o false si no es servicio</returns>
        public bool esTipoServicio(string pCodTipoDoc)
        {
            return esPedidoServicio(pCodTipoDoc);
        }

        /// <summary>
        /// Verifica que el tipo de posicion es  combo
        /// </summary>
        /// <param name="pCodTipoPos">Tipo de posición.</param>
        /// <returns>Devuelve true si es combo o false si no es combo</returns>
        public bool esTipoPosCombo(string pCodTipoPos)
        {
            return esTipoPosComboStatic(pCodTipoPos);
        }

        /// <summary>
        /// Verifica que el tipo de posicion es kit
        /// </summary>
        /// <param name="pCodTipoPos">Tipo de posición.</param>
        /// <returns>Devuelve true si es kit o false si no es kit</returns>        
        public bool esTipoPosKit(string pCodTipoPos)
        {
            return esTipoPosKitStatic(pCodTipoPos);
        }

        public bool esTipoCabCombo(string pCodTipoPos)
        {
            return esTipoCabComboStatic(pCodTipoPos);
        }
        public bool esTipoCabKit(string pCodTipoPos)
        {
            return esTipoCabKitStatic(pCodTipoPos);
        }
        public bool esTipoSinLote(string pCodTipoDoc)
        {
            return esTipoSinLoteStatic(pCodTipoDoc);
        }

        public bool esTipoXY(string pCodigo, string pConfigKey)
        {
            return esTipoX(pCodigo, pConfigKey);
        }

        #endregion



        public static int getDecimalesStatic
        {
            get { return Convert.ToInt16(getParamValueStatic("Decimales")); }
        }

        public static string getParamValueStatic(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }

        public static bool esOferta(string pCodTipoDoc)
        {
            string[] codServs = getParamValueStatic("CodOferta").Split(',');
            foreach (string str in codServs)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esPedidoServicio(string pCodTipoDoc)
        {
            string[] codServs = getParamValueStatic("CodServicios").Split(',');
            foreach (string str in codServs)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoCabComboStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoCabCombo").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoPosComboStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoPosCombo").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoCabKitStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoCabKit").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoPosKitStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoPosKit").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoSinLoteStatic(string pCodTipoDoc)
        {
            string[] codTipoDoc = getParamValueStatic("CodSinLote").Split(',');
            foreach (string str in codTipoDoc)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// Verifica que sea un tipo determinado.
        /// </summary>
        /// <param name="pCodigo">Valor que se pide verificar.</param>
        /// <param name="pConfigKey">Llave que es buscada en el archivo de configuración.</param>
        /// <returns>Devuelve true o false </returns> 
        public static bool esTipoX(string pCod, string pConfigKey)
        {
            try
            {
                string[] codTipoDoc = getParamValueStatic(pConfigKey).Split(',');
                foreach (string str in codTipoDoc)
                {
                    if (pCod == str)
                    {
                        return true;
                    }
                }
                return false;
            }
            catch { return false; }
        }

        public static DateTime dateSapToNet(string pFechaSAP)
        {
            DateTime tmpVar = new DateTime();
            try
            {
                tmpVar = new DateTime(Convert.ToInt16(pFechaSAP.Substring(0, 4)), Convert.ToInt16(pFechaSAP.Substring(4, 2)), Convert.ToInt16(pFechaSAP.Substring(6, 2)));
            }
            catch { tmpVar = new DateTime(); }
            return tmpVar;
        }

        public static string dateNetToSap(DateTime pFechaNET)
        {
            try
            {
                return pFechaNET.Year.ToString().PadLeft(4, '0') + pFechaNET.Month.ToString().PadLeft(2, '0') + pFechaNET.Day.ToString().PadLeft(2, '0');
            }
            catch { return string.Empty; }
        }



        #region IParametroDALC Members
        public List<GenericBE> getDocVtaCot()
        {
            throw new NotImplementedException();
        }

        public List<GenericBE> obtenerTipoDocFactura(string idTabla)
        {
            throw new NotImplementedException();
        }

        #endregion


        #region Combo Lista Campaña



        public List<GenericBE> cmbCampana(List<string> lstLote)
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            BAPIDLV_RANGE_CHARGTable listaLote = new BAPIDLV_RANGE_CHARGTable();
            BAPIDLV_RANGE_CHARG itemLote = null;
            foreach (string itm in lstLote)
            {
                itemLote = new BAPIDLV_RANGE_CHARG();
                itemLote.Batch_Low = itm; itemLote.Option0 = "EQ"; itemLote.Sign = "I";
                listaLote.Add(itemLote);
            }
            DYCBOXTable dy = new DYCBOXTable();
            proxy.Zvmc_Sd_029(ref dy, ref listaLote);

            DataTable dt = dy.ToADODataTable();
            List<GenericBE> listaResult = new List<GenericBE>();
            foreach (DataRow dr in dt.Rows)
            {
                GenericBE obj = new GenericBE();
                obj.Codigo = dr["FIELDNAME"].ToString();
                obj.Descripcion = dr["HELPID"].ToString();
                listaResult.Add(obj);
            }
            return listaResult;
        }



        #endregion

        public  List<GenericBE> cmbTipodocFac()
        { 
                
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            ZSSD_TIPOFACTTable tbl = new ZSSD_TIPOFACTTable();
            proxy.Zvmc_Sd_033(ref tbl);
            List<GenericBE> listaResult = new List<GenericBE>();
            foreach (ZSSD_TIPOFACT itm in tbl)
            {
                GenericBE obj = new GenericBE();
                obj.Codigo = itm.Invtp + "-" + itm.Auart;
                obj.Descripcion = itm.Ltdes;
                obj.Adic1 = itm.Auart;
                listaResult.Add(obj);
            }

            return listaResult;
            
        }


        #region Miembros de IParametroDALC


        public decimal getImpuesto(string claseCondicion, string clasif_cliente, string clasif_material)
        {
            throw new NotImplementedException();
        }

        #endregion


        public void getFolioClaseDocumentoPedFac(string numDoc, out string folio, out string claseDocumento, out string tipo)
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            proxy.Zvmc_Sd_023(numDoc.PadLeft(10, '0'), out claseDocumento, out folio, out tipo);
        }

        public void getDatosUbicación(out  List<GenericBE> lstReg, out List<PoblacionBE> lstPob)
        {
            List<GenericBE> listaResult = new List<GenericBE>();
            lstReg = listaResult;
            lstPob = new List<PoblacionBE>();
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            
            ZESD_ADRCITYTable tblPob = new ZESD_ADRCITYTable();
            T005UTable tblReg = new T005UTable();
            //Zvmc_Sd_051(ref ZESD_ADRCITYTable Pe_Tadrcity, ref T005UTable Pe_Tt005u);
            proxy.Zvmc_Sd_051(ref tblPob, ref tblReg);

            PoblacionBE objPobBlank = new PoblacionBE();
            objPobBlank.Codigo = string.Empty; objPobBlank.Descripcion = string.Empty; objPobBlank.Region = string.Empty;
            //lstPob.Add(objPobBlank);

            GenericBE objBlank = new GenericBE();
            objBlank.Codigo = string.Empty; objBlank.Descripcion = string.Empty;
            //lstReg.Add(objBlank);

            foreach (ZESD_ADRCITY itm in tblPob)
            {
                PoblacionBE obj = new PoblacionBE();
                obj.Codigo = itm.City_Code;
                obj.Descripcion = itm.City_Name;
                obj.Region = itm.Region;
                lstPob.Add(obj);
            }

            foreach (T005U itm in tblReg)
            {
                GenericBE obj = new GenericBE();
                obj.Codigo = itm.Bland;
                obj.Descripcion = itm.Bezei;
                lstReg.Add(obj);
            }

            //return listaResult;
        }
    }
}
